package com.itheima.health.RedisWorks;


import com.itheima.health.common.RedisConstant;
import com.itheima.health.service.SetMealService;
import com.itheima.health.util.QiniuUtils;
import lombok.extern.slf4j.Slf4j;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.quartz.QuartzJobBean;

import java.util.Set;

/**
 * 自定义任务类 清理垃圾图片
 */
@Slf4j
public class ClearImageJob extends QuartzJobBean {
    //这里我们操作Redis数据库 来分别拿到我们的
    // 套餐的所有图片名称的集合  和  套餐保存到数据库的所有图片名称 这两个集合
    //然后借助这些方法和工具 来计算两个集合的差集
    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private QiniuUtils qiniuUtils;

    @Autowired
    private SetMealService setMealService;

    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        log.info("准备开始清理垃圾图片!");
        //根据Redis种保存的两个set集合进行差集计算,来获取垃圾图片名称
        Set<String> diff = redisTemplate.boundSetOps(RedisConstant.SETMEAL_PIC_RESOURCES).members();
        if (diff != null) {
            for (String img : diff) {
                log.info("正在清理垃圾图片,垃圾图片名称:" + img);
                //得到统计后的没有存到数据库的图片   说明没有被使用
                Long aLong = setMealService.countByImg(img);
                //这里做判断是否被使用
                if (aLong == 0) {
                    //如果没被使用   我们就删除七牛云上的垃圾图片
                    //调七牛云方法删除七牛云上的图片
                    log.info("清理七牛云垃圾图片");
                    qiniuUtils.deleteFileFromQiniu(img);
                } else {
                    //如果被使用了 我们不要删除
                    log.info("图片已被使用,无法清理:{}", img);
                }
                //无论是否清理七牛云上的图片  都从Redis中删除
                log.info("清理Redis垃圾图片");
                redisTemplate.boundSetOps(RedisConstant.SETMEAL_PIC_RESOURCES).remove(img);
            }
            log.info("清理垃圾图片完毕,干干净净,板板正正!");
        }
    }
}